package projet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.persistence.*;
import javax.ejb.*;
import agent.*;

/**
 */
@Stateless
@Local
public class TacheEJB implements TacheInterface {

	@PersistenceContext
	EntityManager em;
	@EJB
	AgentInterface agentMGR;
	
	public void addTache(Tache t) {
		em.persist(t);
	}
	
	public void update(Tache t) {
		em.merge(t);
	}
	
	
	public Tache findById(int id) {
		return (Tache)em.find(Tache.class, id);
	}
	
	
	public void updatePriorite(int idTache,int priorite) {
		Tache t = this.findById(idTache);
		t.setPriorite(priorite);
		em.flush();
	}
	
	public void updateDateFin(int idTache, Date dateFin) {
		Tache t = this.findById(idTache);
		t.setDateFin(dateFin);
		em.flush();
	}
	
	public void updateAvancement(int idTache, int avancement) {
		Tache t = this.findById(idTache);
		t.setAvancement(avancement);
		em.flush();
	}
	
	public void addPredecesseur(int idTache, int idPred) {
		Tache t = this.findById(idTache);
		Tache tpred = this.findById(idPred);
		t.addPredecesseur(tpred);
		em.flush();
	}
	
	public void removeTache(int idTache) {
		em.remove(this.findById(idTache));
	}
	
	public void addCollaborateur(int idTache, int idCollaborateur) {
		Tache t = this.findById(idTache);
		Agent a = agentMGR.findById(idCollaborateur);
		t.addCollaborateur(a);
		em.flush();
	}
	
	public ArrayList<Tache> getFromProjet(int idProjet) {
		Query q  = em.createQuery("SELECT t FROM Tache t WHERE t.projet.id="+idProjet);
		if(q==null) {
			return new ArrayList<Tache>();
		}
		else {
			return (ArrayList<Tache>)q.getResultList();
		}
	}
	
	public Collection<Agent> findCollaborateur(int idTache) {
		Query q = em.createQuery("SELECT c FROM Agent c JOIN c.taches t WHERE t.id="+idTache);
		return (Collection<Agent>)q.getResultList();
	}
	
	public ArrayList<Tache> findPredecesseurs(int idTache) {
		Query q = em.createQuery("SELECT p FROM Tache p JOIN p.successeurs t WHERE t.id="+idTache);
		return (ArrayList<Tache>)q.getResultList();
	}
}

